/**
 * 大事件后端API开发
 * 1. 用户注册
 * 2. 用户登录
 * 3. 个人中心
 *  3.1 获取用户基本信息
 *  3.2 更新用户基本信息
 *  3.3 重置密码
 *  3.4 更新用户头像
 * 4. 文章分类管理
 * 5. 文章管理
 */
const express = require('express')
const app = express()
const cors = require('cors')
const jio = require('@hapi/joi')
const expressJWT = require('express-jwt')

const userRouter = require('./routers/user')
const userinfoRouter = require('./routers/userinfo')
const articleCateRouter = require('./routers/article_cate')
const config = require('./config/config')

// 配置解析前端传来数据的中间件
app.use(express.json())
app.use(express.urlencoded({extended: false}))
// 配置处理错误请求的全局中间件
app.use((req, res, next) => {
    res.cc = (err, status=1) => {
        res.send({
            status,
            msg: err instanceof Error? err.message: err
        })
    }

    next()
})
// 配置跨域中间件
app.use(cors())
// 配置解析jwttoken的中间件
app.use(expressJWT({secret: config.secretKey}).unless({path: [/^\/api/]}))
// 配置用户登录和注册路由
app.use('/api', userRouter)
app.use(articleCateRouter)
// 配置用户中心路由
app.use(userinfoRouter)
// 配置全局捕获异常中间件
app.use((err, req, res, next) => {
    if (err instanceof jio.ValidationError) return res.cc(err)
    if (err.name == 'UnauthorizedError') return res.cc(err.name)
    res.cc(err)
})


app.listen(80, () => {
    console.log('server is running at http://127.0.0.1:80')
})